理解收件箱(Inbox)
在 aos 中,进程通过 handlers 获取消息并且执行。未处理的消息将进入进程的收件箱(Inbox)
什么是 Handlers?
Handler 是一个函数,接收并且处理进程消息。它处理这些消息是通过将消息作为参数来进行的。
lua
function main(Message, ao)
...dostuff
return {
Output = ...,
Messages = {},
Spawns = {}
}
end
main
函数返回一个 lua Table,包含 Output, Message, Spawns
或者 Error
。在 aos 中你可以给进程添加 Handler
方法来处理逻辑,Handler
中有三个参数:
- Handler 名字
- 匹配函数
- 处理函数
lua
Handlers.add("name",
function (Msg)
-- Does this message match (return true or false)
return Msg.Action == "Register"
end,
function (Msg)
print("Registered User.")
table.insert(Members, Msg.From)
ao.send({Target = Msg.From, Data = "Registered."})
end
)
关于收件箱
收件箱会存储尚未处理的消息,它们在这里等待被处理。一旦消息被处理,它就会被从收件箱中移除。
示例:将收件箱视为语音邮件。 正如未接听的电话会被转至语音信箱,让你稍后处理一样,你的进程不立即处理的消息都会进入收件箱。未处理的消息将被存储在这里,直到你处理他们。
总结
一开始似乎所有邮件都会进入你的收件箱,如果它们在处理后就被删除,这可能会令人疑惑。 语音邮件的类比应该可以解释这种设计:就像你接听的电话不会转到语音邮件一样,你处理过的消息也不会出现在收件箱中。 这说明了收件箱和 Handler 的功能。